#include <iostream>
using std::cout;
using std::endl;
//单例对象创建在静态区
class Singleton{
public:
    //构造函数私有化之后，类的内部可以调用构造函数
    //需要在类的内部调用一次构造函数，创建出一个对象来i
    //使用静态成员函数是最好的，因为静态成员函数不依赖于对象
    static Singleton & getInstance(){
        //虽然静态成员函数可以被反复调用，下面这行代码也会被
        //反复执行，但是并不会每次调用都去创建一个对象
        //因为该对象是存放在静态区的，如果静态区已经有了
        //一个该类的实例对象，后续便不会再创建了
        static Singleton s;
        return s;
    }
    //将函数删除
    Singleton(const Singleton & rhs) = delete;
    Singleton & operator=(const Singleton & rhs) = delete;
private:
    Singleton(){

    }
};

void test(){
    //Singleton s;
    //Singleton s2;
    Singleton & s1 = Singleton::getInstance();
    Singleton & s2 = Singleton::getInstance();
    cout << &s1 << ":" <<&s2 << endl;
}

int main()
{
    test();
    return 0;
}

